package com.mbc.mapper;


import com.mbc.dto.MbcAnimalShelterDTO;
import com.mbc.dto.GetMbcAnimalShelterDTO;
import com.mbc.vo.GetMbcAnimalShelterVO;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDateTime;
import java.util.ArrayList;

/**
 * <p>
 * 流浪动物庇护所表 Mapper 接口
 * </p>
 *
 * @author suimeng
 * @since 2024-04-17
 */
@Mapper
public interface AnimalShelterMapper {

    /**
     * 新增动物收容所
     *
     * @param maxShelterId        最大避难所 ID
     * @param signId              签名 ID
     * @param userId
     * @param mbcAnimalShelterDTO MBC 动物收容所 DTO
     * @param now                 现在
     * @return int
     */
    @Insert("insert into mbc_animal_shelter(shelter_id,name, logo_url, sign_id, capacity, user_id, contact, email,wechat_number," +
            " " +
            "status, tag,create_time) " +
            "values (#{maxShelterId},#{mbcAnimalShelterDTO.name},#{mbcAnimalShelterDTO.logoUrl},#{signId}," +
            "#{mbcAnimalShelterDTO.capacity},#{userId},#{mbcAnimalShelterDTO.contact}," +
            "#{mbcAnimalShelterDTO.email},#{mbcAnimalShelterDTO.wechatNumber},#{mbcAnimalShelterDTO.status},#{mbcAnimalShelterDTO.tag},#{now})")
    int insertAnimalShelter(Integer maxShelterId,String signId, Integer userId, MbcAnimalShelterDTO mbcAnimalShelterDTO,
                             LocalDateTime now);

    /**
     * 找到最大的庇护所id
     *
     * @return {@link Integer}
     */
    @Select("select max(shelter_id) from mbc_animal_shelter for update")
    Integer getByMaxShelterId();

    /**
     * 全查和条件查询庇护所
     *
     * @param offest                 Offest
     * @param limit                  限制
     * @param getMbcAnimalShelterDTO 获取 MBC 动物收容所 DTO
     * @return {@link ArrayList}<{@link GetMbcAnimalShelterVO}>
     */
    ArrayList<GetMbcAnimalShelterVO> getByAnimalShelter(Integer offest, Integer limit,
                                                        GetMbcAnimalShelterDTO getMbcAnimalShelterDTO);

    /**
     * 更新动物收容所
     *
     * @param mbcAnimalShelterDTO MBC 动物收容所 DTO
     * @param userId              用户 ID
     * @return int
     */
    int updateAnimalShelter(MbcAnimalShelterDTO mbcAnimalShelterDTO,Integer userId);

    /**
     * 删除动物收容所
     *
     * @param userId 用户 ID
     * @return int
     */
    int deleteAnimalShelter(Integer userId);

    /**
     * 根据id查询庇护所详细信息
     *
     * @param shelterId 避难所 ID
     * @return {@link GetMbcAnimalShelterVO}
     */
    GetMbcAnimalShelterVO getByIdAnimalShelter(Integer shelterId);
}
